home *** CD-ROM | disk | FTP | other *** search
- /* Startup Selector */
- /* by OLIVERES Jean-Marc */
- /* GUENOT Raphaël */
- /* (c) 1996-97 Moonchild Prod. */
- /* 11.09.97 */
-
- OPT REG=3
- OPT OSVERSION=37
- OPT PREPROCESS
-
- #define DATE '11.09.97'
- #define VERS '2.1'
-
- MODULE 'dos/dos','dos/dostags','dos/dosasl','dos/notify'
- MODULE 'locale','libraries/locale'
- MODULE 'intuition/intuition','intuition/screens'
- MODULE 'gadtools','libraries/gadtools'
- MODULE 'reqtools','libraries/reqtools'
- MODULE 'exec/nodes','exec/lists','exec/ports','amigalib/lists'
- MODULE 'utility/hooks','tools/installhook'
- MODULE 'devices/inputevent','icon','workbench/workbench'
- MODULE 'graphics/text','diskfont','libraries/diskfont',
- 'graphics/gfx','graphics/rastport','graphics/gfxmacros'
- MODULE 'raphe/checkqualifier','raphe/asciifp','raphe/freezewindow',
- 'raphe/sfx','raphe/directorylist'
-
- OBJECT lvitem OF mln
- icon:INT
- name:PTR TO CHAR
- ENDOBJECT
-
- ENUM ER_NONE,ER_WIN,ER_DIR,ER_NODIR,ER_SCR,ER_MOUSE,ER_EXAM,ER_REQ,ER_GAD,
- ER_LOC,ER_FONT,ER_ICON,ER_FILE,ER_MEM
- ENUM WBS=1,USER,LVID,RMB,WBSP
- ENUM ALWAYSOPENED=1,DOUBLECLICK,STARTUPSDIR,DEFSTARTUP,QUALIFIER,SCREENMODE,
- DISABLEUSER,DISABLEWBS,LASTSTARTUP,FONT,FSIZE,EDITOR,LANGUAGE,SOUNDS
- ENUM MEN_ABOUT=1,MEN_PREFS,MEN_CLI,MEN_QUIT,MEN_NEWFILE,MEN_EHIGHSCRIPT,
- MEN_DHIGHSCRIPT
- ENUM MSG_PROJECT=1,MSG_ABOUT,MSG_PREFS,MSG_CLI,MSG_QUIT,MSG_EDIT,MSG_DELETE,
- MSG_NEWFILE,MSG_WBSTART,MSG_COMMANDS,MSG_USER,MSG_WBSTARTUP,MSG_REMEMBER,
- MSG_ERWIN,MSG_ERDIR,MSG_ERNODIR,MSG_ERSCR,MSG_ERGAD,MSG_ERMEM,MSG_ERMOUSE,
- MSG_NOFILE,MSG_NORENUSER,MSG_NORNENWBS,MSG_NOEXECUTE,MSG_CLOSEWIN,
- MSG_ERLOC,MSG_HIGHSCRIPT,MSG_DELSCRIPT,MSG_YESNO,MSG_ERFONT,MSG_ERICON,
- MSG_LOADSSP,MSG_ERROR
-
- RAISE ER_WIN IF OpenWindowTagList()=NIL,
- ER_SCR IF OpenScreenTagList()=NIL,
- ER_MEM IF New()=NIL
-
- CONST BIGGER=-1,SMALLER=1
- CONST WIDCMP=IDCMP_CLOSEWINDOW OR IDCMP_GADGETUP OR IDCMP_MENUPICK OR LISTVIEWIDCMP
- CONST WFLAGS=WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_GIMMEZEROZERO+WFLG_NEWLOOKMENUS+WFLG_DEPTHGADGET
-
- DEF ptrwin=NIL:PTR TO window,glist=NIL
- DEF scr=NIL:PTR TO screen,sig=-1,visual,menu
- DEF lv_width=NIL,lv_heigth=NIL,lv_gad,fic_nbr=0
- DEF dirlock=NIL
- DEF result,response,p_anchor:PTR TO anchorpath,olddir
- DEF ch[256]:STRING
- DEF node=NIL:PTR TO ln
- DEF wbsplus,wbsp_path
- DEF qual=NIL,rmbchoice=0
- DEF afp=NIL:PTR TO asciifp,fw=NIL:PTR TO freezewindows
- DEF tattr:PTR TO textattr,tfont:PTR TO textfont
- DEF rwidth=0,sound,out,cat
- DEF about=NIL,check=NIL,launched=NIL,opencli=NIL,prefer=NIL,exit=NIL,
- welcome=NIL,delete=NIL,edit=NIL,confirm=NIL
- DEF audio=NIL:PTR TO audio,dirlist=NIL:PTR TO directorylist
- DEF nreq=NIL:PTR TO notifyrequest,notifysig
- DEF icons=NIL:PTR TO LONG,lvhook:hook,maxitemh
-
- PROC main() HANDLE
- DEF mes=NIL:PTR TO intuimessage
- DEF id,gad=NIL:PTR TO gadget,i,userdata,idcmp,item
- DEF seconds=0,micros,seconds2,micros2,sel
- DEF prefs:PTR TO LONG
- DEF selected
- DEF sigwait,sig
- initprefs()
- IF afp.getkeyword(ALWAYSOPENED)=NO
- IF peekqual() AND qual=NIL THEN Raise(ER_MOUSE)
- ENDIF
- init()
- IF FindTask('Workbench')=NIL THEN initmonitor()
- IF afp.getkeyword(SOUNDS)
- loadsound()
- ENDIF
- screen()
- wbsp_path:='SYS:prefs/WBStartup+Prefs'
- wbsplusprefs()
- scanstartupdir()
- addstartgadget()
- createmen()
- window()
- playsound(welcome)
- sigwait:=NIL
- sigwait:=Shl(1,ptrwin.userport.sigbit)
- IF notifysig<>-1 THEN sigwait:=sigwait OR Shl(1,notifysig)
- REPEAT
- sig:=Wait(sigwait)
- IF sig AND Shl(1,notifysig)
- Gt_ReplyIMsg(mes)
- mes:=NIL
- closewin()
- scanstartupdir()
- addstartgadget()
- window(FALSE)
- sigwait:=NIL
- sigwait:=Shl(1,ptrwin.userport.sigbit)
- IF notifysig<>-1 THEN sigwait:=sigwait OR Shl(1,notifysig)
- ELSEIF sig AND Shl(1,ptrwin.userport.sigbit)
- IF mes:=Gt_GetIMsg(ptrwin.userport)
- idcmp:=mes.class
- Gt_GetGadgetAttrsA(lv_gad,ptrwin,NIL,[GTLV_SELECTED,{selected},NIL])
- SELECT idcmp
- CASE IDCMP_MENUPICK
- IF (item:=ItemAddress(menu,mes.code))<>NIL
- id:=Long(item+34)
- SELECT id
- CASE MEN_ABOUT
- playsound(about)
- req('StartupSelector\n\nVersion '+VERS+'\n\nCopyright © 1996-97\n\n'+
- DATE+'\n\nJean-marc ''Moonchild'' OLIVERES\n&\n'+
- 'Raphaël ''RaphE'' GUENOT.','OK',gcs(MSG_ABOUT))
- CASE MEN_PREFS
- fw.freezewindow(ptrwin)
- playsound(prefer)
- prefs:=[afp.getkeyword(DISABLEUSER),
- afp.getkeyword(DISABLEWBS)]
- SystemTagList('SYS:Prefs/StartupSelectorPrefs',NIL)
- fw.activatewindow(ptrwin)
- Gt_ReplyIMsg(mes)
- mes:=NIL
- IF reloadprefs()
- sigwait:=NIL
- sigwait:=Shl(1,ptrwin.userport.sigbit)
- IF notifysig<>-1 THEN sigwait:=sigwait OR Shl(1,notifysig)
- ENDIF
- afp.setkeyword(DISABLEUSER,prefs[0])
- afp.setkeyword(DISABLEWBS,prefs[1])
- CASE MEN_CLI
- playsound(opencli)
- SystemTagList('NewCli',NIL)
- CASE MEN_QUIT
- playsound(exit,TRUE)
- Gt_ReplyIMsg(mes)
- out:=1
- quit()
- CASE MEN_NEWFILE
- playsound(edit)
- makepath(afp.getkeyword(EDITOR),'New_script')
- SystemTagList(ch,NIL)
- CASE MEN_EHIGHSCRIPT
- IF selected<>-1
- playsound(edit)
- makepath(afp.getkeyword(EDITOR),node.name)
- SystemTagList(ch,NIL)
- ENDIF
- CASE MEN_DHIGHSCRIPT
- response:=0
- IF selected<>-1
- playsound(delete)
- response:=req(gcs(MSG_DELSCRIPT),gcs(MSG_YESNO),gcs(MSG_DELETE))
- ENDIF
- IF response=1
- playsound(confirm)
- makepath(NIL,node.name)
- DeleteFile(ch)
- Gt_SetGadgetAttrsA(lv_gad,ptrwin,NIL,[GTLV_LABELS,-1,NIL])
- scanstartupdir()
- Gt_SetGadgetAttrsA(lv_gad,ptrwin,NIL,[GTLV_LABELS,dirlist.dirlist,NIL])
- Gt_SetGadgetAttrsA(lv_gad,ptrwin,NIL,[GTLV_SELECTED,-1,NIL])
- ENDIF
- ENDSELECT
- ENDIF
- CASE IDCMP_GADGETUP
- gad:=mes.iaddress
- userdata:=gad.userdata
- SELECT userdata
- CASE USER
- playsound(check)
- afp.setkeyword(DISABLEUSER,Not(afp.getkeyword(DISABLEUSER)))
- CASE WBS
- playsound(check)
- afp.setkeyword(DISABLEWBS,Not(afp.getkeyword(DISABLEWBS)))
- CASE RMB
- playsound(check)
- rmbchoice:=Not(rmbchoice)
- CASE WBSP
- playsound(launched)
- fw.freezewindow(ptrwin)
- SystemTagList(wbsp_path,NIL)
- fw.activatewindow(ptrwin)
- CASE LVID
- node:=dirlist.dirlist.head
- FOR i:=1 TO mes.code DO node:=node.succ
- IF afp.getkeyword(DOUBLECLICK)
- CurrentTime({seconds2},{micros2})
- IF seconds=0
- CurrentTime({seconds},{micros})
- sel:=i
- ELSEIF DoubleClick(seconds,micros,seconds2,micros2) AND (sel=i)
- afp.setkeyword(LASTSTARTUP,node.name)
- Gt_ReplyIMsg(mes)
- launchstart(node.name)
- ELSE
- seconds:=0
- CurrentTime({seconds},{micros})
- sel:=i
- ENDIF
- ELSE
- afp.setkeyword(LASTSTARTUP,node.name)
- Gt_ReplyIMsg(mes)
- launchstart(node.name)
- ENDIF
- ENDSELECT
- ENDSELECT
- IF mes<>NIL THEN Gt_ReplyIMsg(mes)
- ENDIF
- ENDIF
- UNTIL idcmp=IDCMP_CLOSEWINDOW
- launchstart(afp.getkeyword(DEFSTARTUP))
- EXCEPT
- SELECT exception
- CASE ER_WIN ; req(gcs(MSG_ERWIN),'OK',gcs(MSG_ERROR))
- CASE ER_DIR ; req(gcs(MSG_ERDIR),'OK',gcs(MSG_ERROR))
- CASE ER_NODIR ; req(gcs(MSG_ERNODIR),'OK',gcs(MSG_ERROR))
- CASE ER_SCR ; req(gcs(MSG_ERSCR),'OK',gcs(MSG_ERROR))
- CASE ER_GAD ; req(gcs(MSG_ERGAD),'OK',gcs(MSG_ERROR))
- CASE ER_LOC ; req(gcs(MSG_ERLOC),'OK',gcs(MSG_ERROR))
- CASE ER_FONT ; req(gcs(MSG_ERFONT),'OK',gcs(MSG_ERROR))
- CASE ER_ICON ; req(gcs(MSG_ERICON),'OK',gcs(MSG_ERROR))
- CASE ER_MEM ; req(gcs(MSG_ERMEM),'OK',gcs(MSG_ERROR))
- CASE ER_MOUSE
- sound:=1
- IF rmbchoice
- launchstart(afp.getkeyword(DEFSTARTUP))
- ELSE
- StrCopy(ch,afp.getkeyword(STARTUPSDIR),ALL)
- AddPart(ch,afp.getkeyword(DEFSTARTUP),70)
- IF (dirlock:=Lock(ch,ACCESS_READ))=NIL
- req(gcs(MSG_ERMOUSE),'OK',gcs(MSG_ERROR))
- SystemTagList({lwb},NIL)
- quit()
- ENDIF
- ENDIF
- launchstart(afp.getkeyword(DEFSTARTUP,TRUE))
- ENDSELECT
- quit()
- ENDPROC
-
- PROC init()
- DEF task,coul:PTR TO LONG,j
- AssignPath('LOCALE','SYS:LOCALE/')
- IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_GAD)
- IF (localebase:=OpenLibrary('locale.library',38))=NIL THEN Raise(ER_LOC)
- IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(NIL)
- NEW audio.new([RIGHT_1+LEFT_1,RIGHT_2+LEFT_2]:CHAR)
- NEW fw.init()
- NEW dirlist.new()
- NEW nreq
- notifysig:=AllocSignal(-1)
- IF notifysig<>-1
- task:=FindTask(0)
- nreq.name:=afp.getkeyword(STARTUPSDIR)
- nreq.flags:=NRF_SEND_SIGNAL
- nreq.port:=task
- nreq.signalnum:=notifysig
- ENDIF
- StartNotify(nreq)
- cat:=OpenCatalogA(NIL,'StartupSelector.catalog',
- [OC_LANGUAGE,afp.getkeyword(LANGUAGE),
- NIL])
- installhook(lvhook, {lvrender})
- coul:={rgb}
- FOR j:=1 TO 24
- coul[]:=Shl(coul[],24)
- coul[]++
- ENDFOR
- ENDPROC
-
- PROC initprefs()
- DEF ls:PTR TO LONG,quals:PTR TO LONG
- Rename({wbsold},{wbs})
- Rename({wbsoldinfo},{wbsinfo})
- Rename({userold},{user})
- AssignPath('ENV','ENVARC:')
- reqtoolsbase:=OpenLibrary('reqtools.library',37)
- ls:= ['LEFTBUTTON','RIGHTBUTTON','MIDDLEBUTTON',
- 'LEFTALT','RIGHTALT','LEFTSHIFT','RIGHTSHIFT',
- 'LEFTCOMMAND','RIGHTCOMMAND','CONTROL']
- NEW afp.new([
- ['Double click ?', DOUBLECLICK,VAL_YESNO,YES],
- ['Window always opened ?', ALWAYSOPENED,VAL_YESNO,NO],
- ['Sounds ?', SOUNDS,VAL_YESNO,YES],
- ['Path to editor:', EDITOR,VAL_STR,'hd1:misc/ced3.5'],
- ['Startups directory:', STARTUPSDIR,VAL_STR,'S:Start/'],
- ['Default startup:', DEFSTARTUP,VAL_STR,{startseq}],
- ['Language:', LANGUAGE,VAL_STR,'français'],
- ['Qualifier:', QUALIFIER,ls,0],
- ['Screen mode:', SCREENMODE,VAL_HEX,$29000],
- ['Font:', FONT,VAL_STR,'topaz.font'],
- ['Font size:', FSIZE,VAL_DEC,8],
- ['Disable User-Startup ?', DISABLEUSER,VAL_YESNO,NO],
- ['Disable WBStartup ?', DISABLEWBS,VAL_YESNO,NO]
- ])
- IF afp.load({usename}) THEN afp.load({prefsname})
- quals:=[IEQUALIFIER_LEFTBUTTON,IEQUALIFIER_RBUTTON,IEQUALIFIER_MIDBUTTON,
- IEQUALIFIER_LALT,IEQUALIFIER_RALT,IEQUALIFIER_LCOMMAND,
- IEQUALIFIER_RCOMMAND,IEQUALIFIER_LSHIFT,IEQUALIFIER_RSHIFT,
- IEQUALIFIER_CONTROL]
- qual:=quals[afp.getkeyword(QUALIFIER)]
- ENDPROC
-
- PROC initmonitor()
- DEF info:fileinfoblock
- p_anchor:=New(SIZEOF anchorpath)
- IF (dirlock:=Lock('DEVS:monitors/',ACCESS_READ))=NIL THEN Raise(ER_NODIR)
- olddir:=CurrentDir(dirlock)
- result:=MatchFirst('~(#?.info)',p_anchor)
- WHILE result=0
- info:=p_anchor.info
- SystemTagList(info.filename,NIL)
- result:=MatchNext(p_anchor)
- ENDWHILE
- MatchEnd(p_anchor)
- CurrentDir(olddir)
- UnLock(dirlock)
- dirlock:=NIL
- ENDPROC
-
- PROC req(msg,choice,title)
- DEF s
- IF ptrwin THEN fw.freezewindow(ptrwin)
- IF reqtoolsbase
- s:=RtEZRequestA(msg,choice,0,0,[RTEZ_FLAGS,EZREQF_CENTERTEXT,
- RT_REQPOS,REQPOS_CENTERSCR,
- RTEZ_REQTITLE,title,
- NIL])
- ELSE
- s:=EasyRequestArgs(NIL,[20,0,title,msg,choice],0,NIL)
- ENDIF
- IF ptrwin THEN fw.activatewindow(ptrwin)
- ENDPROC s
-
- PROC scanstartupdir()
- DEF err,lenstr
- DEF ln:PTR TO lvitem,j,icon:PTR TO diskobject,img:PTR TO image
- REPEAT
- err:=dirlist.dirlist(afp.getkeyword(STARTUPSDIR),DLF_NODIRS,'~(#?.info|#?.bak)')
- IF err
- StringF(ch,'\s\n\s',gcs(MSG_ERDIR),gcs(MSG_LOADSSP))
- req(ch,'OK',gcs(MSG_ERROR))
- SystemTagList('SYS:Prefs/StartupSelectorPrefs',NIL)
- afp.load({usename})
- ENDIF
- IF Not(err)
- IF (fic_nbr:=dirlist.total())=NIL
- nofile()
- ENDIF
- ENDIF
- UNTIL (fic_nbr<>NIL) AND (err=NIL)
- freeicons() -> test dans la PROC pour savoir si icons<>NIL
- icons:=List(fic_nbr)
- SetList(icons,fic_nbr)
- ln:=dirlist.gotofirst()
- maxitemh:=NIL
- lv_width:=NIL
- FOR j:=0 TO fic_nbr-1
- StrCopy(ch,afp.getkeyword(STARTUPSDIR))
- AddPart(ch,ln.name,256)
- lenstr:=textlength(ln.name)+28
- IF icon:=GetDiskObject(ch)
- img:=icon.gadget.gadgetrender
- icons[j]:=icon
- IF (lenstr+img.width+2)>lv_width THEN lv_width:=lenstr+img.width+2
- IF img.height>maxitemh THEN maxitemh:=img.height
- ELSE
- IF lenstr>lv_width THEN lv_width:=lenstr
- ENDIF
- ln.icon:=j
- ln:=dirlist.getnext()
- ENDFOR
- lv_width:=lv_width+2
- ENDPROC fic_nbr
-
- PROC nofile()
- StringF(ch,'\s\n\s',gcs(MSG_NOFILE),gcs(MSG_LOADSSP))
- req(ch,'OK',gcs(MSG_ERROR))
- SystemTagList('SYS:Prefs/StartupSelectorPrefs',NIL)
- afp.load({usename})
- ENDPROC
-
- PROC reloadprefs()
- DEF sdir,sm,font,tfont,reopengui=FALSE
- sdir:=afp.getkeyword(STARTUPSDIR)
- sm:=afp.getkeyword(SCREENMODE)
- font:=afp.getkeyword(FONT)
- tfont:=afp.getkeyword(FSIZE)
- afp.load({usename})
- IF (sm<>afp.getkeyword(SCREENMODE)) OR (StrCmp(afp.getkeyword(FONT),font)=NIL) OR (afp.getkeyword(FSIZE)<>tfont)
- closegui()
- screen()
- reopengui:=-1
- ENDIF
- IF (StrCmp(sdir,afp.getkeyword(STARTUPSDIR))=NIL)
- closewin()
- reopengui:=-1
- ENDIF
- IF reopengui
- scanstartupdir()
- addstartgadget()
- window()
- ENDIF
- ENDPROC reopengui
-
- PROC addstartgadget()
- DEF gadget,wbsplen
- DEF strs:PTR TO LONG,lenstr
- rwidth:=0
- strs:=[gcs(MSG_USER),
- gcs(MSG_WBSTARTUP),
- gcs(MSG_REMEMBER),
- gcs(MSG_WBSTART),NIL]
- WHILE strs[]<>NIL DO IF (lenstr:=textlength(strs[]++))>rwidth THEN rwidth:=lenstr
- rwidth:=rwidth+35
- visual:=GetVisualInfoA(scr,NIL)
- gadget:=CreateContext({glist})
- wbsplen:=textlength(gcs(MSG_WBSTART))+8
- IF tattr.ysize>maxitemh THEN maxitemh:=tattr.ysize
- INC maxitemh
- IF maxitemh AND 1 THEN INC maxitemh
- IF fic_nbr<6
- lv_heigth:=5*maxitemh+4
- ELSEIF (fic_nbr*maxitemh+4)>(scr.height-(2*maxitemh))
- lv_heigth:=Div(scr.height,maxitemh)*maxitemh+4-(2*maxitemh)
- ELSE
- lv_heigth:=fic_nbr*maxitemh+4
- ENDIF
- gadget:=CreateGadgetA(LISTVIEW_KIND,gadget,
- [0,0,lv_width,lv_heigth,0,tattr,0,0,visual,LVID]:newgadget,
- [ GTLV_LABELS, dirlist.dirlist,
- GTLV_SELECTED, dirlist.getpos(afp.getkeyword(DEFSTARTUP)),
- GTLV_ITEMHEIGHT, maxitemh,
- GTLV_CALLBACK, lvhook,
- GTLV_MAXPEN, $FF,
- GTLV_SHOWSELECTED,NIL,NIL])
- lv_gad:=gadget
- gadget:=CreateGadgetA(CHECKBOX_KIND,gadget,
- [lv_width+2,0,12,tattr.ysize+4,
- gcs(MSG_USER),tattr,
- 0,PLACETEXT_RIGHT,visual,USER]:newgadget,
- [GTCB_CHECKED,afp.getkeyword(DISABLEUSER),NIL])
- gadget:=CreateGadgetA(CHECKBOX_KIND,gadget,
- [lv_width+2,tattr.ysize+4,12,tattr.ysize+4,
- gcs(MSG_WBSTARTUP),tattr,
- 0,PLACETEXT_RIGHT,visual,WBS]:newgadget,
- [GTCB_CHECKED,afp.getkeyword(DISABLEWBS),NIL])
- gadget:=CreateGadgetA(CHECKBOX_KIND,gadget,
- [lv_width+2,tattr.ysize*2+8,12,tattr.ysize+4,
- gcs(MSG_REMEMBER),tattr,
- 0,PLACETEXT_RIGHT,visual,RMB]:newgadget,
- [GTCB_CHECKED,rmbchoice,NIL])
- IF wbsplus
- gadget:=CreateGadgetA(BUTTON_KIND,gadget,
- [((rwidth-wbsplen)/2)+lv_width,lv_heigth-tattr.ysize-5,wbsplen,
- tattr.ysize+4,gcs(MSG_WBSTART),tattr,0,0,visual,WBSP]:newgadget,NIL)
- ENDIF
- ENDPROC
-
- PROC screen()
- tattr:=[afp.getkeyword(FONT),afp.getkeyword(FSIZE),0,0]:textattr
- IF (tfont:=OpenFont(tattr))=NIL
- IF (diskfontbase:=OpenLibrary('diskfont.library',37))=NIL
- req(gcs(MSG_ERFONT),'OK',gcs(MSG_ERROR))
- ELSE
- tfont:=OpenDiskFont(tattr)
- ENDIF
- ENDIF
- IF tfont=NIL THEN tattr:=['topaz.font',8,0,0]:textattr
- scr:=OpenScreenTagList(NIL,[SA_TITLE, {ssscrntitle},
- SA_DEPTH, 3,
- SA_TYPE, PUBLICSCREEN,
- SA_PUBNAME, {pubname},
- SA_PUBSIG, sig:=AllocSignal(-1),
- SA_PUBTASK, FindTask(NIL),
- SA_PENS, [-1],
- SA_FONT, tattr,
- SA_DISPLAYID, afp.getkeyword(SCREENMODE),
- SA_AUTOSCROLL,TRUE,
- SA_COLORS32, {palette},
- NIL])
- PubScreenStatus(scr,0)
- SetDefaultPubScreen({pubname})
- SetPubScreenModes(SHANGHAI)
- ENDPROC
-
- PROC window(activate=TRUE)
- DEF beveltags
- DEF w_width,w_left,w_top
- w_width:=lv_width+rwidth+8
- w_left:=(scr.width-w_width)/2
- w_top:=(scr.height-lv_heigth)/2
- beveltags:=[GT_VISUALINFO,visual,GTBB_FRAMETYPE,BBFT_BUTTON,NIL]
- LayoutMenusA(menu,visual,NIL)
- ptrwin:=OpenWindowTagList(NIL,[WA_TITLE ,{sstitle},
- WA_GADGETS ,glist,
- WA_LEFT ,w_left,
- WA_TOP ,w_top,
- WA_INNERWIDTH ,w_width,
- WA_INNERHEIGHT ,lv_heigth,
- WA_IDCMP ,WIDCMP,
- WA_FLAGS ,WFLAGS,
- WA_CUSTOMSCREEN ,scr,
- WA_AUTOADJUST ,TRUE,
- WA_ACTIVATE ,activate,
- NIL])
- SetMenuStrip(ptrwin,menu)
- Gt_RefreshWindow(ptrwin,NIL)
- ENDPROC
-
- PROC createmen()
- DEF fp
- IF KickVersion(39) THEN fp:=1 ELSE fp:=0
- menu:=CreateMenusA([1,0,gcs(MSG_PROJECT),0,0,0,0,
- 2,0,gcs(MSG_ABOUT),'?',0,0,MEN_ABOUT,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,gcs(MSG_PREFS),'P',0,0,MEN_PREFS,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,gcs(MSG_CLI),'C',0,0,MEN_CLI,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,gcs(MSG_QUIT),'Q',0,0,MEN_QUIT,
- 1,0,gcs(MSG_COMMANDS),0,0,0,0,
- 2,0,gcs(MSG_EDIT),0,0,0,0,
- 3,0,gcs(MSG_NEWFILE),'E',0,0,MEN_NEWFILE,
- 3,0,NM_BARLABEL,0,0,0,0,
- 3,0,gcs(MSG_HIGHSCRIPT),'S',0,0,MEN_EHIGHSCRIPT,
- 2,0,NM_BARLABEL,0,0,0,0,
- 2,0,gcs(MSG_DELETE),'D',0,0,MEN_DHIGHSCRIPT,
- 0,0,0,0,0,0,0]:newmenu,[GTMN_NEWLOOKMENUS,TRUE,
- GTMN_FRONTPEN, fp,
- NIL])
- ENDPROC
-
- PROC lvrender(y,o:PTR TO lvitem,m:PTR TO lvdrawmsg)
- DEF icon:PTR TO diskobject,img:PTR TO image,x,back=0
- DEF r:PTR TO rastport
- IF m.methodid=LV_DRAW
- r:=m.rastport
- SetStdRast(r)
- icon:=icons[o.icon]
- IF (m.state AND LVR_SELECTED) OR (m.state AND LVR_SELECTEDDISABLED)
- back:=3
- IF icon THEN img:=icon.gadget.selectrender
- ELSE
- IF icon
- IF (img:=icon.gadget.gadgetrender)=NIL THEN img:=icon.gadget.selectrender
- ENDIF
- ENDIF
- Box(m.bounds.minx,m.bounds.miny,m.bounds.maxx,m.bounds.maxy,back)
- Colour(1,back)
- IF icon
- x:=2
- y:=Shr(maxitemh-img.height,1)+m.bounds.miny
- DrawImage(m.rastport,img,x,y)
- x:=img.width+4
- ELSE
- x:=4
- ENDIF
- y:=Shr(maxitemh-m.drawinfo.font.ysize,1)+m.bounds.miny+m.drawinfo.font.ysize-1
- TextF(x,y,o.name)
- ELSE
- RETURN LVCB_UNKNOWN
- ENDIF
- ENDPROC LVCB_OK
-
- PROC launchstart(file)
- DEF launch
- IF sound=1
- END audio
- ELSE
- playsound(launched,TRUE)
- ENDIF
- IF afp.getkeyword(DISABLEUSER)
- IF (Rename({user},{userold}))=NIL
- req(gcs(MSG_NORENUSER),'OK',gcs(MSG_ERROR))
- RETURN
- ENDIF
- ENDIF
- IF afp.getkeyword(DISABLEWBS)
- IF (Rename({wbs},{wbsold}))=NIL OR (Rename({wbsinfo},{wbsoldinfo}))=NIL
- req(gcs(MSG_NORNENWBS),'OK',gcs(MSG_ERROR))
- ENDIF
- ENDIF
- makepath('C:EXECUTE ',file)
- closegui()
- IF (launch:=SystemTagList(ch,NIL))=TRUE
- req(gcs(MSG_NOEXECUTE),'OK',gcs(MSG_ERROR))
- ENDIF
- quit()
- ENDPROC
-
- PROC wbsplusprefs()
- IF dirlock:=Lock(wbsp_path,ACCESS_READ)
- wbsplus:=TRUE
- UnLock(dirlock)
- dirlock:=NIL
- ENDIF
- ENDPROC
-
- PROC quit()
- closegui()
- IF cat THEN CloseCatalog(cat)
- IF menu THEN FreeMenus(menu)
- IF dirlock THEN UnLock(dirlock)
- IF localebase THEN CloseLibrary(localebase)
- IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
- IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
- IF iconbase THEN CloseLibrary(iconbase)
- IF out<>1
- IF rmbchoice
- afp.setkeyword(DEFSTARTUP,node.name)
- afp.save()
- ENDIF
- ENDIF
- IF afp THEN END afp
- IF fw THEN END fw
- END audio
- IF nreq
- EndNotify(nreq)
- FreeSignal(notifysig)
- END nreq
- ENDIF
- DeleteFile({usename})
- freesample(about)
- freesample(check)
- freesample(launched)
- freesample(opencli)
- freesample(prefer)
- freesample(exit)
- freesample(welcome)
- freesample(delete)
- freesample(edit)
- freesample(confirm)
- CleanUp(0)
- ENDPROC
-
- PROC freeicons()
- DEF j
- IF icons
- FOR j:=0 TO ListLen(icons)-1
- IF icons[j] THEN FreeDiskObject(icons[j])
- ENDFOR
- DisposeLink(icons)
- ENDIF
- ENDPROC
-
- PROC closegui()
- closewin()
- IF scr
- IF countvisitorwindows({pubname})>0
- req(gcs(MSG_CLOSEWIN),'OK',gcs(MSG_QUIT))
- REPEAT
- Wait(Shl(1,sig))
- UNTIL countvisitorwindows({pubname})=0
- ENDIF
- SetDefaultPubScreen(NIL)
- CloseS(scr)
- scr:=NIL
- ENDIF
- IF tfont
- IF diskfontbase
- CloseFont(tfont)
- CloseLibrary(diskfontbase)
- ELSE
- CloseFont(tfont)
- ENDIF
- ENDIF
- IF sig>=0
- FreeSignal(sig)
- sig:=0
- ENDIF
- ENDPROC
-
- PROC closewin()
- IF ptrwin
- ClearMenuStrip(ptrwin)
- CloseW(ptrwin)
- ptrwin:=NIL
- IF glist THEN FreeGadgets(glist)
- IF visual THEN FreeVisualInfo(visual)
- visual:=NIL
- glist:=NIL
- ENDIF
- ENDPROC
-
- PROC countvisitorwindows(scrname:PTR TO CHAR)
- DEF list:PTR TO lh,node:PTR TO pubscreennode,count
- list:=LockPubScreenList()
- node:=FindName(list,scrname)
- IF scr=NIL
- count:=-1
- ELSE
- count:=node.visitorcount
- ENDIF
- UnlockPubScreenList()
- ENDPROC count
-
- PROC textlength(text)
- ENDPROC IntuiTextLength([0,0,0,0,0,tattr,text,NIL]:intuitext)
-
- PROC loadsound()
- about:=load8svx('PROGDIR:sounds/about')
- check:=load8svx('PROGDIR:sounds/check')
- exit:=load8svx('PROGDIR:sounds/quit')
- launched:=load8svx('PROGDIR:sounds/launched')
- opencli:=load8svx('PROGDIR:sounds/opencli')
- prefer:=load8svx('PROGDIR:sounds/preferences')
- welcome:=load8svx('PROGDIR:sounds/welcome')
- edit:=load8svx('PROGDIR:sounds/edit')
- delete:=load8svx('PROGDIR:sounds/delete')
- confirm:=load8svx('PROGDIR:sounds/confirm')
- ENDPROC
-
- PROC playsound(sample,wait=FALSE)
- IF (sample)
- audio.play(sample)
- IF wait THEN audio.waitendsample()
- ENDIF
- ENDPROC
-
- PROC makepath(begin,end)
- DEF ch2[108]:STRING
- IF begin<>NIL
- StrCopy(ch2,begin,ALL)
- StrCopy(ch,afp.getkeyword(STARTUPSDIR),ALL)
- AddPart(ch,end,70)
- StringF(ch,'"\s"',ch)
- StrAdd(ch2,' ',ALL)
- StrAdd(ch2,ch,ALL)
- StrCopy(ch,ch2,ALL)
- ELSE
- StrCopy(ch,afp.getkeyword(STARTUPSDIR),ALL)
- AddPart(ch,end,70)
- ENDIF
- ENDPROC ch
-
- PROC gcs(msg)
- ENDPROC GetCatalogStr(cat,msg,
- ListItem(['Project','About','Preferences','NewCli','Quit',
- 'Edit','Delete','New file','Call WBStartup+',
- 'Commands','Disable User-Startup','Disable WBStartup',
- 'Remember choices','Unable to open window !',
- 'Can''t find your directory !','Not a directory !',
- 'Unable to lock Workbench screen !',
- 'Can''t open the Gadtools.library !',
- 'Not enough memory !',
- 'No Startup-Sequence !',
- 'No script in the directory !',
- 'Can''t rename User-Startup !',
- 'Can''t rename WBStartup or WBStartup.info !',
- 'Can''t execute this script !',
- 'Please close the\nwindows to continue',
- 'Can''t open Locale.library !',
- 'Selected script ?',
- 'Do you really want to delete\nthe selected script ?',
- 'YES|NO','Can''t open Diskfont.library !',
- 'Can''t open Icon.library !',
- 'Loading StartupSelectorPrefs',
- 'Error !'],msg-1))
-
- palette:
- INT 8,0 -> 8 couleurs à charger en commançant par la couleur 0
- rgb:
- LONG 149,149,149, 0,0,0, 255,255,255, 59,103,162, 123,123,123,
- 175,175,175, 170,144,124, 255,169,151
- LONG 0 -> fin de la liste
-
- wbs: CHAR 'SYS:WBStartup',0
- wbsinfo: CHAR 'SYS:WBStartup.info',0
- wbsold: CHAR 'SYS:WBStartupOld',0
- wbsoldinfo: CHAR 'SYS:WBStartupOld.info',0
- user: CHAR 'S:User-Startup',0
- userold: CHAR 'S:User-StartupOld',0
- lwb: CHAR 'C:LoadWB',0
- sstitle: CHAR 'StartupSelector ',VERS,0
- ssscrntitle: CHAR 'StartupSelector ',VERS,' Copyright © 1996-97 Moonchild Prod.',0
- startseq: CHAR 'Startup-Sequence',0
- pubname: CHAR 'StartupSelector',0
- prefsname: CHAR 'S:startupselector.prefs',0
- usename: CHAR 'RAM:startupselector.prefs',0
-
- CHAR '$VER: StartupSelector ',VERS,' (',DATE,') Moonchild Prod.',0
-